iT邦幫忙

2024 iThome 鐵人賽

DAY 2
0
Mobile Development

肯定會斷賽之在 Android 開發使用設計模式系列 第 2

113/02 - 單例模式(Singleton)- Java

  • 分享至 

  • xImage
  •  

介紹

單例在專案中只會存在一個,也可以想成整個專案的全域變數
所以用起來很無腦,什麼狀態和暫存都往單例丟
然後查 Bug 時就會痛恨當初的自己

種類

單例有四種,分別是

  • 餓漢模式
  • 懶漢模式
  • 雙重檢查鎖定模式
  • 靜態內部

懶人包:直接學「靜態內部」就好,其他的不用學

我們精英中心.jpg

如果你真的很想知道的話,完整說明在這邊:
「靜態內部單例」第一次載入類別並不會初始化,只有在第一次調用 getInstance() 的時候才會載入類別,不僅能保證執行緒安全,也能保證單例的唯一性,也延遲了單例的實例化,比較推薦;此外單例對象如果持有 Context,那麼很容易引發記憶體洩露。此時需要注意傳遞給單例對象的 Context 最好是 Application Context。

靜態內部單例實作

假設我們要建立一個存放會員資料的單例

基本建立

public class Member {

    public static Member getInstance() {
        return MemberHolder.MEMBER;
    }

    private static class MemberHolder {
        private static final Member MEMBER = new Member();
    }
    
}

建立姓名全域變數

public class Member {
    
    private String name;

    public static Member getInstance() {
        return MemberHolder.MEMBER;
    }

    private static class MemberHolder {
        private static final Member MEMBER = new Member();
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }
}

存入姓名

Member.getInstance().setName("AndyAWD");

讀取姓名

Log.d("TAG", "姓名: " + Member.getInstance().getName());

上一篇
寫在開始 - 賽前準備
下一篇
113/03 - 單例模式(Singleton)- Kotlin
系列文
肯定會斷賽之在 Android 開發使用設計模式30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

1 則留言

0
leighisthebest
iT邦新手 5 級 ‧ 2024-09-16 23:32:16

/images/emoticon/emoticon32.gif

AndyAWD iT邦新手 2 級 ‧ 2024-09-16 23:32:59 檢舉

/images/emoticon/emoticon37.gif

我要留言

立即登入留言